#ifndef NETCONNECT_H
#define NETCONNECT_H

#include <time.h>

// 网络连接状态定义
#define NET_DISCONNECTED 0
#define NET_CONNECTED    1
#define NET_ERROR        -1

// 默认连接参数
#define DEFAULT_PORT 8080
#define DEFAULT_IP "127.0.0.1"
#define DEFAULT_MAX_RETRIES 3
#define DEFAULT_RETRY_DELAY 5

// 前向声明传感器数据结构
typedef struct SensorData SensorData;

// 网络连接上下文结构体
typedef struct {
    int sock_fd;            // 套接字文件描述符
    int status;             // 当前网络状态
    int last_error;         // 最后一次错误代码
    time_t last_connected;  // 最后连接成功时间
} NetworkContext;

/**
 * @brief 初始化网络连接上下文
 * @param ctx 网络连接上下文指针
 * @return 成功返回0，失败返回-1
 */
int network_init(NetworkContext *ctx);

/**
 * @brief 检查网络连接状态
 * @param ctx 网络连接上下文指针
 * @return 当前网络状态 (NET_CONNECTED/NET_DISCONNECTED/NET_ERROR)
 */
int network_check(NetworkContext *ctx);

/**
 * @brief 建立网络连接
 * @param ctx 网络连接上下文指针
 * @param max_retries 最大重试次数
 * @param retry_delay 重试间隔(秒)
 * @return 成功返回NET_CONNECTED，失败返回NET_DISCONNECTED
 */
int network_connect(NetworkContext *ctx, int max_retries, int retry_delay);

/**
 * @brief 发送传感器数据
 * @param ctx 网络连接上下文指针
 * @param data 要发送的传感器数据
 * @return 成功返回0，失败返回-1
 */
int network_send(NetworkContext *ctx, SensorData *data);

/**
 * @brief 关闭网络连接
 * @param ctx 网络连接上下文指针
 */
void network_close(NetworkContext *ctx);

#endif /* NETCONNECT_H */